`
https://leetcode.cn/problems/numbers-with-same-consecutive-differences/
`

/**
 * @param {number} n
 * @param {number} k
 * @return {number[]}
 */
var numsSameConsecDiff = function (n, k) {
  const res = []
  // 记录值
  let track = 0
  // 记录位数
  let digit = 0

  const backtrack = () => {
    if (digit === n) {
      return res.push(track)
    }

    for (let i = 0; i <= 9; i++) {
      // 本题的剪枝逻辑 1，第一个数字不能是 0
      if (digit === 0 && i === 0) continue;
      // 本题的剪枝逻辑 2，相邻两个数字的差的绝对值必须等于 k
      if (digit > 0 && Math.abs(i - track % 10) !== k) continue;

      // 做选择，在 track 尾部追加数字 i
      digit++;
      track = 10 * track + i;
      // 进入下一层回溯树
      backtrack(n, k);
      // 取消选择，删除 track 尾部数字
      track = Math.floor(track / 10);
      digit--;
    }
  }

  backtrack(0)

  return res
};